之前迷宮及找找看使用到類似的方法、語法撰寫如GUI、隨即生成等,但似乎未加上特效的介紹,今天就來加上一些閃爍的特效吧~
###可以考慮使用 Swing 的 Timer 來製作簡單的動畫效果,例如按鈕點擊後閃爍、背景顏色改變等。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class FindTheTreasureGameWithEffects extends JFrame {
private JButton[] buttons;
private int treasureIndex;
public FindTheTreasureGameWithEffects() {
setTitle("找找看遊戲 - 特效版");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(4, 4));
buttons = new JButton[16];
Random random = new Random();
treasureIndex = random.nextInt(16); // 隨機選擇一個按鈕作為寶藏
for (int i = 0; i < 16; i++) {
buttons[i] = new JButton("?");
buttons[i].setFont(new Font("Arial", Font.BOLD, 20));
buttons[i].setFocusPainted(false);
buttons[i].setBackground(Color.LIGHT_GRAY);
buttons[i].addActionListener(new ButtonClickListener(i));
add(buttons[i]);
}
}
private class ButtonClickListener implements ActionListener {
private int index;
public ButtonClickListener(int index) {
this.index = index;
}
@Override
public void actionPerformed(ActionEvent e) {
if (index == treasureIndex) {
buttons[index].setText("寶藏!");
triggerFlashEffect(buttons[index], Color.YELLOW, 3, 300); // 觸發閃爍特效
JOptionPane.showMessageDialog(null, "恭喜,你找到了寶藏!");
} else {
buttons[index].setText("空的");
triggerFlashEffect(buttons[index], Color.RED, 2, 300); // 觸發閃爍特效
}
}
}
// 方法:觸發按鈕閃爍特效
private void triggerFlashEffect(JButton button, Color flashColor, int flashes, int delay) {
Timer timer = new Timer(delay, new ActionListener() {
private int count = 0;
private boolean isOriginalColor = true;
private Color originalColor = button.getBackground();
@Override
public void actionPerformed(ActionEvent e) {
if (count < flashes * 2) { // 每次閃爍包括一次顏色改變和恢復
button.setBackground(isOriginalColor ? flashColor : originalColor);
isOriginalColor = !isOriginalColor;
count++;
} else {
button.setBackground(originalColor); // 結束時恢復原顏色
((Timer) e.getSource()).stop(); // 停止計時器
}
}
});
timer.start();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
FindTheTreasureGameWithEffects game = new FindTheTreasureGameWithEffects();
game.setVisible(true);
});
}
}
閃爍特效邏輯⭐️:
javax.swing.Timer
來實現按鈕的閃爍特效。Timer
是一個定時器,它會以固定的間隔觸發指定的動作。這裡我們設定每 300
毫秒觸發一次事件,使按鈕的背景顏色在預定的次數內來回切換。triggerFlashEffect()
方法接受四個參數:按鈕、閃爍顏色、閃爍次數和每次閃爍的間隔時間。這個方法會創建一個 Timer
,每次觸發時會切換按鈕的背景顏色,直到完成指定的閃爍次數。按鈕點擊後的效果✨:
可配置的特效🪩:
triggerFlashEffect()
的參數來更改。這樣可以根據遊戲的需求來設計不同的視覺反饋效果。